如何用递归思路写这条小题<投信>?

来源:百度知道 编辑:UC知道 时间:2024/06/15 03:44:16
请用iostream.h

有一位糊涂人,写了n封信和n个信封,到了邮寄的时候,把所有的信都装错了信封。设D(n)为n封信装错信封可能的种类数,可以用下面的递归公式:
D(1)=0,D(2)=1,D(n)=(n-1)(D(n-1)+D(n-2)).
编程求D(n)。

Input

共一行,为信和信封数n(n<15)。

Output

共一行,为可能的种类数D(n)。

Input: 4 Output: 9
新手...请问程序写错了甚麼呢???

#include <iostream>
using namespace std;
int D(int f)
{
if (f==0) return 1;
else if (f==1) return 2;
else return (f-1);
}

int main(){
int n=0;
cin>>n;
cout<<(n-1)*(D(n-1)+D(n-2));
return 0;
}

//VC++ 6.0调试通过
#include <iostream>
using namespace std;

int D(int f)
{
if (f==1)
return 0;
else
if (f==2)
return 1;
else
return (f-1)*(D(f-1)+D(f-2));
}

int main()
{
int n=0;
cout<<"请输入信封数量(>=1):"<<endl;
cin>>n;
cout<<"--------结果---------"<<endl;
cout<<D(n)<<endl;
cout<<"---------------------"<<endl;
return 0;
}